// 文件名：unordered_set_unique_enum.cpp
// 目的：演示使用 std::unordered_set 对随机生成的整数序列去重，获得唯一元素集合。
// 要点：
//   - 使用 mt19937 + uniform_int_distribution 生成可复现的随机数（固定种子 12345）；
//   - generated 向量存储原始序列（含重复）；
//   - unordered_set<int> unique 作为哈希集合，均摊 O(1) 插入与查重；
//   - reserve(generated.size()) 预留桶空间，减少重哈希开销；
//   - 迭代 unordered_set 输出的顺序与插入顺序无关（哈希桶顺序），若需有序输出可转存至 vector 并排序。
// 复杂度：
//   - 生成：O(N)；去重：均摊 O(N)；打印：O(N)。
// 注意：
//   - 哈希表的遍历顺序不稳定，调试输出次序可能在不同平台/运行中不同。

#include <iostream>
#include <random>
#include <unordered_set>
#include <vector>

int main() {
    std::mt19937 rng{12345};
    std::uniform_int_distribution<int> dist(1, 20);

    std::vector<int> generated;
    generated.reserve(30);
    for (int i = 0; i < 30; ++i) {
        generated.push_back(dist(rng));
    }

    std::unordered_set<int> unique;
    unique.reserve(generated.size());

    for (int value : generated) {
        unique.insert(value); // 若已存在则不变，若不存在则加入
    }

    std::cout << "Generated values:\n  ";
    for (int value : generated) {
        std::cout << value << ' ';
    }
    std::cout << "\nUnique values (" << unique.size() << "):\n  ";
    for (int value : unique) {
        std::cout << value << ' ';
    }
    std::cout << '\n';

    return 0;
}